02

Domande passata lezione

La prox settimana


Python

Anaconda & Miniconda https://www.anaconda.com


Suggerimenti di autostudio

Whirlwind Tour of Python by J. VanderPlas


https://jakevdp.github.io/WhirlwindTourOfPython/


Jupyter (IPython)

Google Colab https://colab.research.google.com


Matplotlib e visualizzazione

A cosa serve?

Esplorare i dati --> EDA

Comunicare i risultati dei modelli


Frasi celebri

Above else, show the data.

(Maximize the data-ink ratio. 1983 E. Tufte

https://www.youtube.com/watch?v=pCp0a5_YIWE

Tools matter. W. S. Cleveland







Matplotlib


Come importo una libreria grafica?

content_copy
  from matplotlib.pyplot import *
  from pylab import *
  from numpy import *

Omporta direttamente i comandi
NON FARLO (a meno che non sei Jeremy Howard)
non è Pep8 e non sai poi da che libreria vengono i comandi che stai usando

content_copy
import matplotlib.pyplot as plt
import numpy as np

Così chiami il comando con es plt.comando o np.comando


Per usare matplotlib in Jupyter

Magic command

content_copy
%matplotlib inline
content_copy
%matplotlib notebook

content_copy
%matplotlib widget

https://github.com/matplotlib/ipympl/blob/master/matplotlib.gif



Creare Figure e Assi

se ne volete un'altra la create esplicitamente

per creare una griglia

La più usata è di solito la 2x2


aggiungere assi

senza al "s" si possono aggiungere assi alla figura già aggiunta

content_copy
ax = plt.subplot(n, m, i) # or plt.subplot(nmi)
# places ax at position i in n x m grid
# (1-based index) i numeri vanno colonna per colonna
ax11 = plt.subplot(221)
ax12 = plt.subplot(222)
ax21 = plt.subplot(223)
ax22 = plt.subplot(224)
 
#equivalente ma meno bello perché nel primo caso posso creare layout irregolari riempiendo quello che voglio
#(cosa fa il comando ravel???)
fig, axes = plt.subplots(22)
ax11, ax12, ax21, ax22 = axes.ravel()
 
 
 
ax = plt.subplot(n, m, i) # or plt.subplot(nmi)
# places ax at position i in n x m grid
# (1-based index)
 
ax11 = plt.subplot(221)
ax12 = plt.subplot(222)
ax2 = plt.subplot(212)

Due interfacce

la modalità stateful è la più usata, quella a oggetti la più versatile

content_copy
sin = np.sin(np.linspace(-44100))

è il vostra prima vera istruzione di Python. Cosa fa?
Vedete np.sin e np.linspace

content_copy
plt.subplot(221)
plt.plot(sin)
plt.subplot(222)
plt.plot(sin, c='r')
#
#
fig, axes = plt.subplots(22)
axes[00].plot(sin)
axes[01].plot(sin, c='r')

Perché in orizzontale sugli assi non sono riportati valori tra -4 e 4?


Differenze tra le interfacce

content_copy
plt.title
plt.xlim, plt.ylim
plt.xlabel, plt.ylabel
plt.xticks, plt.yticks
#
#
ax = plt.gca()   # get current axes
fig = plt.gcf()  # get current figure
#
#
ax.set_title
ax.set_xlim, ax.set_ylim
ax.set_xlabel, ax.set_ylabel
ax.set_xticks, ax.set_yticks (& ax.set_xtick_labels)

I comandi

Dopo vedremo degli esempi anche da Seaborn


Plot

content_copy
fig, ax = plt.subplots(24, figsize=(105))
ax[00].plot(sin)
ax[01].plot(range(100), sin)  # same as above
ax[02].plot(np.linspace(-44100), sin)
ax[03].plot(sin[::10], 'o')
ax[10].plot(sin, c='r')
ax[11].plot(sin, '--')
ax[12].plot(sin, lw=3)
ax[13].plot(sin[::10], '--o')
plt.tight_layout() # makes stuff fit - usually works

Cosa succede in [0, 2] ? Cosa in [0, 3]?
Andate a rivedervelo sin[::10] è lo slicing di un array


Scatter

content_copy
fig, ax = plt.subplots(14, figsize=(103),
                       subplot_kw={'xticks': (), 'yticks': ()})
ax[0].plot(x, y, 'o')
ax[1].scatter(x, y)
ax[2].scatter(x, y, c=x-y, cmap='bwr', edgecolor='k')
ax[3].scatter(x, y, c=x-y, s=sizes, cmap='bwr', edgecolor='k')


histogram

content_copy
fig, ax = plt.subplots(13, figsize=(203))
ax[0].hist(data)
ax[1].hist(data, bins=1000)
ax[2].hist(data, bins="auto")

Cos'è un istogramma? In verticale ho il numero di conteggi di oggetti che hanno una qualità numerica ripostata in orizzontale.
Dal grafico sembra che i valori si distribuiscono come una campana con sovrapposti altri due picchi. Notate come il dettaglio sul modo in cui si distriscono i valori dipende dal numero di bin


barre

Come l'istogramma ma categorico. In orizzontale ho una qualità categorica i.e. discreta riguardante categorie separate


heatmap

Grafica "matrici" di valori in due dimensioni il colore indica l'altezza / il valore del singolo elemento.

content_copy
fig, ax = plt.subplots(22)
im1 = ax[00].imshow(arr)
ax[01].imshow(arr, interpolation='bilinear')
im3 = ax[10].imshow(arr, cmap='gray')
im4 = ax[11].imshow(arr, cmap='bwr',
                      vmin=-1.5, vmax=1.5)
plt.colorbar(im1, ax=ax[00])
plt.colorbar(im3, ax=ax[10])
plt.colorbar(im4, ax=ax[11])


[ref] https://matplotlib.org/stable/gallery/images_contours_and_fields/interpolation_methods.html


Hexbin

Se abbiamo molti dati lo scatter plot nasconde molto dettaglio a causa dell'overdensity. Possiamo combattere questo fenomeno scegliendo la trasparenza alpha

content_copy
fig, ax = plt.subplots(13, figsize=(104),
                       subplot_kw={'xlim': (-11),
                                   'ylim': (-11)})
ax[0].scatter(x, y)
ax[1].scatter(x, y, alpha=.1)
ax[2].scatter(x, y, alpha=.01)

Oppure usiamo hexbin un tipo di istogramma 2d

La figura precedente a stella verrebbe

content_copy
plt.figure()
plt.hexbin(x, y, bins='log', extent=(-11-11))
plt.colorbar()
plt.axis("off")

(extent regola i boundingbox)


Twinx

Come graficare funzioni di diversi ordini di grandezza?

Uso due assi diversi sullo stesso grafico!

content_copy
ax1 = plt.gca()
line1, = ax1.plot(years, phds)
ax2 = ax1.twinx()
line2, = ax2.plot(years, revenue, c='r')
ax1.set_ylabel("Math PhDs awarded")
ax2.set_ylabel("revenue by arcades")
ax2.legend((line1, line2),
           ("math PhDs awarded""revenue by arcades"))


Aspetti

La stessa funzione con differenti rapporti di aspetto

L'inclinazione media a 45 gradi
https://eagereyes.org/basics/banking-45-degrees
(avanzato guardate il comando GridSpec )

Differenti baseline

Partire o non partire da zero?


https://eagereyes.org/basics/baselines


3D


L'iris dataset il dataset più usato in assoluto negli esempi di classificazione.


Fate

Non fate


Intro all'EDA

Avete mai visto "Atypical" ?
da https://seaborn.pydata.org/tutorial/distributions.html

Quantità rispetto alla dimensione dell'ala


Se scaliamo le altezze facendo in modo che la somma delle altezze di tutte le barre faccia 1 abbiamo normalizzato e sia arrivati a una stima della distribuzione di probabilità DISCRETA.


Kernel density estimation (KDE)


Empirical cumulative distributions

Grafico la somma del numero di campioni al variare del valore della dimensione dell'ala. Normalizzato a 1.

Sto graficando quello che si chiama funzione cumulativa della distribuzione. Se la distribuzione fosse una gaussiana avrei una sigmoide .
L'ECD è molto utile per separare le tre specie ed è molto più regolare dell'istogramma


Grafici bidimensionali

Quantili e Boxplot

Se metto in ordine le misure rispetto ad esempio a total_bill il valore a metà dell'ordinamento è la mediana. La mediana divide la distribuzione in due parti l'una 50% e 50%.
I quantili sono la divisione della distribuzione in
Q0 0% il valore minimo
Q1 25%
Q2 50% la Mediana
Q3 75%
Q4 100% il valore massimo

Q2 indica bene il centro della distribuzione ed è un valore Centrale

Q3 - Q2 indica bene l'allargamento della distribuzione ed è un valore di dispersione


Cosa dovete studiare per casa:

Fine